﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SistemadeEstágios.Model;
using SistemadeEstágios.Negocio;

namespace SistemadeEstágios
{
    public partial class frmCadEstagiarios : Form
    {
        #region Variáveis
        EstagiarioNG _dbEst;
        bool isNovo = false;

        #endregion

        #region Métodos Form
        public frmCadEstagiarios()
        {
            InitializeComponent();
        }

        private void frmCadEstagiarios_Load(object sender, EventArgs e)
        {
            this.Left = 280;
            this.Top = 90;
            _dbEst = new EstagiarioNG();
            LimpaCampos();
        }

        #region KeyPress
        private void TxtMatricula_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtRG_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtCPF_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtTelefone_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtCurso_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtSemestre_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtCep_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtNome_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtCidade_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        #endregion

        #region KeyUp
        private void TxtCurso_KeyUp(object sender, KeyEventArgs e)
        {

        }

        private void TxtMatricula_KeyUp(object sender, KeyEventArgs e)
        {

        }

        #endregion

        #region Click
        private void BtnBscMatricula_Click(object sender, EventArgs e)
        {
            frmPesquisa frm = new frmPesquisa();
            frm.Tipo = TipoPesquisa.Estagiario;
            frm.titulo = "Pesquisa por Estagiário";
            frm.ShowDialog();

            if (frm.bRetorno)
            {
                TxtMatricula.Text = frm.iRetorno.ToString();
                TxtMatricula_Validating(TxtMatricula, new CancelEventArgs(false));
            }
        }

        private void BtnBscCurso_Click(object sender, EventArgs e)
        {
            frmPesquisa frm = new frmPesquisa();
            frm.Tipo = TipoPesquisa.Curso;
            frm.titulo = "Pesquisa por Curso";
            frm.ShowDialog();

            if (frm.bRetorno)
            {
                TxtCurso.Text = frm.iRetorno.ToString();
                TxtCurso_Validating(TxtCurso, new CancelEventArgs(false));
            }
        }

        private void BtnConfirmar_Click(object sender, EventArgs e)
        {
            if (VerificaCampos())
            {
                Estagiaros est = new Estagiaros();

                est.Matricula = Int32.Parse(TxtMatricula.Text.Trim());
                est.Nome = TxtNome.Text.Trim();
                if (rbFem.Checked)
                    est.Sexo = 'F';
                else
                    est.Sexo = 'M';
                est.RG = TxtRG.Text.Trim();
                est.Cpf = TxtCPF.Text.Trim().Replace(".", "").Replace("-", "");
                est.Email = TxtMail.Text.Trim();
                est.Telefone = TxtTelefone.Text.Trim();
                est.Curso = new Cursos();
                est.Curso.Codigo = Int32.Parse(TxtCurso.Text);
                est.Semestre = Int32.Parse(TxtSemestre.Text.Trim());
                est.CEP = TxtCep.Text.Trim();
                est.Cidade = TxtCidade.Text.Trim();
                est.Endereco = TxtEndereco.Text;

                if (_dbEst.Insere(est, isNovo))
                    LimpaCampos();
            }
        }

        private void BtnSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void BtnCancelar_Click(object sender, EventArgs e)
        {
            LimpaCampos();
        }

        #endregion

        #region Validating
        private void TxtCurso_Validating(object sender, CancelEventArgs e)
        {
            CursosNG _cur = new CursosNG();
            Cursos curso;

            if (!string.IsNullOrEmpty(TxtCurso.Text))
            {
                curso = _cur.Buscar(Int32.Parse(TxtCurso.Text));
                if (curso != null)
                    LblMstCurso.Text = curso.Nome;
                else
                    MessageBox.Show("Não foi possível encontrar o Curso. Tente Novamente.");
            }
        }

        private void TxtMail_Validating(object sender, CancelEventArgs e)
        {
            if (!string.IsNullOrEmpty(TxtMail.Text))
            {
                if (TxtMail.Text.IndexOf("@") < 1)
                    MessageBox.Show("Email incorreto. Tente Novamente.", "SIGE");
            }
        }

        private void TxtCep_Validating(object sender, CancelEventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(TxtCep.Text))
            {
                BuscaCepNG _BuscaCEP = new BuscaCepNG();

                CEP cep = _BuscaCEP.Busca(TxtCep.Text);

                if (cep.Resultado.Equals("1") || cep.Resultado.Equals("2"))
                {
                    TxtCidade.Text = cep.Cidade;
                    TxtEndereco.Text = cep.TipoLogradouro + " " + cep.Logradouro + ", " + cep.Bairro;
                }
            }
        }

        private void TxtCPF_Validating(object sender, CancelEventArgs e)
        {
            MaskedTextProvider mask;
            TxtCPF.Text = TxtCPF.Text.Replace(".", "").Replace("-", "");
            if (TxtCPF.Text.Length == 11)
            {
                mask = new MaskedTextProvider("000,000,000-00");
                mask.Set(TxtCPF.Text);
                TxtCPF.Text = mask.ToString();
            }
            else if (string.IsNullOrWhiteSpace(TxtCPF.Text))
            {
                MessageBox.Show("CPF não pode ser nulo. Tente novamente.", "SIGE");
                TxtCPF.Focus();
                TxtCPF.SelectAll();
            }
            else
            {
                MessageBox.Show("CPF Inválido. Tente novamente.", "SIGE");
                TxtCPF.Focus();
                TxtCPF.SelectAll();
            }
        }

        private void TxtMatricula_Validating(object sender, CancelEventArgs e)
        {
            Estagiaros est;

            if (!string.IsNullOrWhiteSpace(TxtMatricula.Text))
            {
                est = _dbEst.Buscar(Int32.Parse(TxtMatricula.Text));

                if (est != null)
                {
                    PreencheCampos(est);
                    isNovo = false;
                }
                else
                {
                    if (e.Cancel)
                    {
                        LimpaCampos();
                    }
                    isNovo = true;
                }
            }
        }

        #endregion

        #endregion

        #region Métodos

        private bool VerificaCampos()
        {
            bool retorno = false;
            if (string.IsNullOrEmpty(TxtNome.Text))
            {
                TxtNome.Focus();
                TxtNome.SelectAll();
                MessageBox.Show("O campo Nome deve ser preenchido. Tente Novamente.");
            }
            else if (string.IsNullOrWhiteSpace(TxtRG.Text))
            {
                TxtRG.Focus();
                TxtRG.SelectAll();
                MessageBox.Show("O campo RG deve ser preenchido. Tente Novamente.");
            }
            else if (string.IsNullOrEmpty(TxtMail.Text))
            {
                TxtMail.Focus();
                TxtMail.SelectAll();
                MessageBox.Show("O campo Email deve ser preenchido. Tente Novamente.");
            }
            else if (string.IsNullOrEmpty(TxtTelefone.Text))
            {
                TxtTelefone.Focus();
                TxtTelefone.SelectAll();
                MessageBox.Show("O campo Telefone deve ser preenchido. Tente Novamente.");
            }
            else if (string.IsNullOrWhiteSpace(TxtSemestre.Text))
            {
                TxtSemestre.Focus();
                TxtSemestre.SelectAll();
                MessageBox.Show("O campo Semestre deve ser preenchido. Tente Novamente.");
            }
            else if (string.IsNullOrWhiteSpace(TxtCidade.Text))
            {
                TxtCidade.Focus();
                TxtCidade.SelectAll();
                MessageBox.Show("O campo Cidade deve ser preenchido. Tente Novamente.");
            }
            else if (string.IsNullOrWhiteSpace(TxtEndereco.Text))
            {
                TxtEndereco.Focus();
                TxtEndereco.SelectAll();
                MessageBox.Show("O campo Endereço deve ser preenchido. Tente Novamente.");
            }
            else
                retorno = true;

            return retorno;
        }

        private void LimpaCampos()
        {
            foreach (Control ctl in Controls)
            {
                if (ctl.GetType() == typeof(GroupBox))
                {
                    foreach (Control control in ctl.Controls)
                    {
                        if (control.GetType() == typeof(TextBox))
                        {
                            control.Text = "";
                        }
                    }
                }
            }

            TxtMatricula.Text = _dbEst.Ultimo().ToString();
            TxtMatricula_Validating(TxtMatricula, new CancelEventArgs(false));
        }

        private void PreencheCampos(Estagiaros est)
        {
            TxtNome.Text = est.Nome;
            if (est.Sexo == 'M')
                rbMasc.Checked = true;
            else
                rbFem.Checked = true;
            TxtRG.Text = est.RG;
            TxtCPF.Text = est.Cpf;
            TxtMail.Text = est.Email;
            TxtTelefone.Text = est.Telefone;
            TxtCurso.Text = est.Curso.Codigo.ToString();
            TxtSemestre.Text = est.Semestre.ToString();
            TxtCep.Text = est.CEP;
            TxtCidade.Text = est.Cidade;
            TxtEndereco.Text = est.Endereco;

            TxtCPF_Validating(TxtCPF, new CancelEventArgs());
            TxtCurso_Validating(TxtCurso, new CancelEventArgs(false));
        }

        #endregion

    }
}
